package com.dkm.orproject.dkmoa.service.serviceimpl;

import com.dkm.orproject.dkmoa.dao.OaWorkSummaryTypeMapper;
import com.dkm.orproject.dkmoa.domain.OaWorkSummaryType;
import com.dkm.orproject.dkmoa.service.OaWorkSummaryTypeService;
import com.dkm.orproject.utils.utils.IdToobtainUtils;
import com.dkm.orproject.utils.utils.ThreeVo;
import com.dkm.orproject.utils.utils.Tools;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.util.StringUtil;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName : OaWorkSummaryTypeServiceImpl  //类名
 * @Description : 工作总结类型服务实现类  //描述
 * @Author : 易嵘  //作者
 * @Date: 2020-11-16 10:21  //时间
 */
@Service
public class OaWorkSummaryTypeServiceImpl implements OaWorkSummaryTypeService {

    /**
     * 工作总结类型Mapper
     */
    @Resource
    OaWorkSummaryTypeMapper workSummaryTypeMapper;

    /**
     * id生成工具
     */
    @Resource
    IdToobtainUtils idToobtainUtils;

    @Resource
    Tools tools;

    /**
     * 批量查询 （分页）
     * @param workSummaryTypeName 工作总结类型名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param page 当前页数
     * @param limit 显示的行数
     * @return 查询结果
     */
    @Override
    public List<OaWorkSummaryType> findAll(String workSummaryTypeName, String startTime, String endTime, Integer page, Integer limit) {
        PageHelper.startPage(page,limit);
        return workSummaryTypeMapper.findAll(workSummaryTypeName,startTime,endTime);
    }

    /**
     * 总行数
     * @param workSummaryTypeName 工作总结类型名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 总行数
     */
    @Override
    public Long rowCount(String workSummaryTypeName, String startTime, String endTime) {
        return workSummaryTypeMapper.rowCount(workSummaryTypeName,startTime,endTime);
    }

    /**
     * id查询
     * @param id 工作总结id
     * @return 查询结果
     */
    @Override
    public OaWorkSummaryType selectByPrimaryKey(Long id) {
        return workSummaryTypeMapper.selectByPrimaryKey(id);
    }

    /**
     * id删除
     * @param id 工作总结类型id
     * @return 回调函数
     */
    @Override
    public int deleteByPrimaryKey(Long id) {
        return workSummaryTypeMapper.deleteByPrimaryKey(id);
    }

    /**
     * 批量删除
     * @param list 工作总结类型id集合
     * @return 回调函数
     */
    @Override
    public int deleteAll(List<Long> list) {
        return workSummaryTypeMapper.deleteAll(list);
    }

    /**
     * 工作总结类型id查询
     * @param list 工作总结类型id集合
     * @return 查询结果
     */
    @Override
    public List<OaWorkSummaryType> selectAll(List<Long> list) {
        return workSummaryTypeMapper.selectAll(list);
    }

    /**
     * 修改
     * @param workSummary 工作总结类型模型
     * @return 回调函数
     */
    @Override
    public int updateByPrimaryKeySelective(OaWorkSummaryType workSummary) {
        return workSummaryTypeMapper.updateByPrimaryKeySelective(workSummary);
    }

    /**
     * 工作总结类型新增
     * @param workSummary 工作总结类型模型
     * @param personnelName 创建人名称
     * @return 回调函数
     */
    @Override
    public int add(OaWorkSummaryType workSummary, String personnelName) {
        workSummary.setPkWorkSummaryTypeId(idToobtainUtils.getNumberId());
        workSummary.setCreatedBy(personnelName);
        workSummary.setIsRevsion("1");
        return workSummaryTypeMapper.insertSelective(workSummary);
    }

    /**
     * 查询所有
     * @param pkWorkSummaryTypeId 工作总结类型id 用于筛选
     * @param show
     * @return 查询结果
     */
    @Override
    public List<ThreeVo> loadWorkSummaryType(Long pkWorkSummaryTypeId, String show) {
        OaWorkSummaryType oaWorkSummaryType = workSummaryTypeMapper.selectByPrimaryKey(pkWorkSummaryTypeId);
        //查询所有
        List<OaWorkSummaryType> workSummaryTypes;
        if(StringUtil.isEmpty(show)){
            workSummaryTypes = workSummaryTypeMapper.loadWorkSummaryType(pkWorkSummaryTypeId);
        }else{
            workSummaryTypes = workSummaryTypeMapper.loadWorkSummaryType(null);
        }

        //树状图模型
        List<ThreeVo> threeVos = new ArrayList<>();
        for (OaWorkSummaryType workSummaryType : workSummaryTypes) {
            ThreeVo threeVo = new ThreeVo();
            if(oaWorkSummaryType!=null && oaWorkSummaryType.getPkWorkSummaryTypeId().equals(workSummaryType.getWorkSummaryTypeSuperior())){
                //设置默认值
                threeVo.setSelected(true);
            }
            //参数
            threeVo.setValue(workSummaryType.getPkWorkSummaryTypeId());
            //显示内容
            threeVo.setName(workSummaryType.getWorkSummaryTypeName());
            //上级id
            threeVo.setSuperId(workSummaryType.getWorkSummaryTypeSuperior());
            //加入树状图
            threeVos.add(threeVo);
        }
        return tools.createTree(threeVos);
    }
}
